package client_tree;

import javax.swing.tree.DefaultMutableTreeNode;

/**
 * Klasa predstavlja cvor stabla cija su deca (direktni potomci) objekti (cvorovi) tipa User.
 * U RLM-u, ovaj objekta predstavlja cvorove 'Online' i 'Offline'. U aplikaciji se kreira
 * po jedan objekat ove klase, za online i offline korisnike. Ovi objekti se kreiraju u klasi
 * ClientModel, koja pojednostavljuje upravljanje ovim cvorovima, i objedinjuje ih u jedan
 * jedinstveni model objekat.
 * 
 * @author UrosKrkic & Radivoje Popovic
 */
public class ClientModelNode extends DefaultMutableTreeNode  {
	
	/**
	 * Ime cvora.
	 */
	private String name;
	
	/**
	 * Konstruktor.
	 * @param name - ime cvora
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public ClientModelNode(String name) {
		this.name = name;
		
		/*
		 * kao user (korisnicki) objekat, cuva se ime cvora, koje se kasnije
		 * koristi u ContactsTreeCellRenderer-u, za specificiranje prikaza
		 * ovo cvora u stablu
		 */
		this.setUserObject(this.name);
	}
	

	
	/**
	 * Metoda omogucuje ispis imena cvora u stablu.
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public String toString() {
		return this.name;
	}

	
	/**
	 * Metod vraca ime cvora.
	 * @return - ime cvora
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public String getName() {
		return this.name;
	}
	
	
	/**
	 * Metoda vraca broj korisnika u cvoru, odnosno broj dece ovog cvora.
	 * @author UrosKrkic & Radivoje Popovic
	 * @return - broj dece this cvora
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public int getUserCount() {
		return this.getChildCount();
	}
	

	/**
	 * Vraca referencu na cvor korisnika na usnovu username-a.
	 * @param username - username korisnika koji se vraca
	 * @return - korisnik sa username-om
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public User getUserByUsername(String username) {
		int getIndex = -1;
		
		if (this.children == null) {
			return null;
		}
		
		for (int i = 0; i < this.children.size(); i++) {
			if ( ((User)children.get(i)).getUsername().equals(username) ) {
				getIndex = i;
				break;
			}
		}
		
		if (getIndex != -1) {
			return (User)this.children.get(getIndex);
		}

		return null;
	}
	
}
